﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ElCharro01.Models;
using System.Configuration;

namespace ElCharro01.Areas.User.Controllers
{
    [Authorize(Roles = "User")]
    public class CheckOutController : Controller
    {
        private Entities db = new Entities();

        public ActionResult OrderConfirm()
        {
            Cart cart = new Cart();
            int cartID = (int)Session["cartId"];
            decimal totale = 0;
            if (cartID != 0)
            {
                cart = db.CartSet.Include("CartDetail").Include("Customer").Single(c => c.Id == cartID);
                List<CartDetail> CartDetailList = cart.CartDetail.ToList();
                foreach (CartDetail cartDetail in CartDetailList)
                {
                    totale = totale + (cartDetail.Quantita * cartDetail.Variant.PrezzoUnitario);
                }
                ViewBag.Totale = totale;
                ViewBag.TotaleConSpeseSpedizione = totale + Convert.ToDecimal(ConfigurationManager.AppSettings["SpeseSpedizione"]);
            }
            return View(cart);
        }

        public ActionResult ShipmentConfirm()
        {
            // prendo i dati dalla session
            int userId = (int)Session["UserId"];

            //recupero l'user dal db
            Customer Customer = (Customer)db.UserSet.Single(u => u.ID == userId);

            List<Location> locationList = new List<Location> (Customer.Location.ToList());
            return View(locationList);

        }
        [HttpPost]
        public ActionResult ShipmentConfirmDetalis(int locationId)
        {
            Location location = db.LocationSet.Single(l => l.Id == locationId);
            ViewBag.LocationId = locationId;
            return PartialView(location);

        }

        public ActionResult ShipmentConfirmDetalisFirst(int id)
        {
            Location location = db.LocationSet.Single(l => l.Id == id);
            ViewBag.LocationId = id;
            return PartialView(location);

        }

        public ActionResult PaymentConfirm(int locationId)
        {

            List<string> paymentType = new List<string>();
            paymentType.Add("Contrassegno");
            paymentType.Add("Vaglia Postale");
            paymentType.Add("Paypal");

            ViewBag.PaymentTypes = paymentType;
            ViewBag.LocationId = locationId;
            return View();

        }

        [HttpPost]
        public ActionResult PaymentConfirmDetalis(int locationId , string paymentType)
        {
            // prendo i dati dalla session
            int userId = (int)Session["UserId"];

            //recupero l'user dal db
            Customer Customer = (Customer)db.UserSet.Single(u => u.ID == userId);

            string paymentMessage;
            if (paymentType.CompareTo("Contrassegno") == 0)
                paymentMessage = "Con il contrassegno la merce verrà consegnata e solo allora dovrai effettuare il pagamento." +
                    "Utilizzando questo tipo di pagamento vi sarà un aumento del costo delle spedizioni pari a:" + ConfigurationManager.AppSettings["CostoContrassegno"] + " €";
            else
                if (paymentType.CompareTo("Vaglia Postale") == 0)
                    paymentMessage = "I dati per effettuare il pagamento con il valia postale sono i seguenti: " + ConfigurationManager.AppSettings["VagliaPostale"];
                else
                    if (paymentType.CompareTo("Paypal") == 0)
                        paymentMessage = "Al termine della procedura di CheckOut potrai effettuare il pagamento utilizzando il tuo account Paypal";
                    else
                    {

                        paymentMessage = "Forma Di Pagamento Non Specificata";
                    }
            ViewBag.SelectedPayment = paymentType;
            ViewBag.SelectedPaymentMessage = paymentMessage;
            ViewBag.LocationId = locationId;
            ViewBag.UserBonus = Customer.Bonus;
            return PartialView();

        }

        public ActionResult PaymentConfirmDetalisFirst(int locationId)
        {
            // prendo i dati dalla session
            int userId = (int)Session["UserId"];

            //recupero l'user dal db
            Customer Customer = (Customer)db.UserSet.Single(u => u.ID == userId);

            string paymentMessage;
            paymentMessage = "Con il contrassegno la merce verrà consegnata e solo allora dovrai effettuare il pagamento";

                ViewBag.SelectedPayment = "Contrassegno";
                ViewBag.LocationId = locationId;
                ViewBag.SelectedPaymentMessage = paymentMessage;
                ViewBag.UserBonus = Customer.Bonus;
            return PartialView();

        }

        public ActionResult BonusUseConfirm(int locationId, string paymentType)
        {
            Cart cart = new Cart();
            int cartID = (int)Session["cartId"];
            decimal totale = 0;
            if (cartID != 0)
            {
                cart = db.CartSet.Include("CartDetail").Include("Customer").Single(c => c.Id == cartID);
                List<CartDetail> CartDetailList = cart.CartDetail.ToList();
                foreach (CartDetail cartDetail in CartDetailList)
                {
                    totale = totale + (cartDetail.Quantita * cartDetail.Variant.PrezzoUnitario);
                }
                ViewBag.Totale = totale;
            }

            ViewBag.UserBonus = cart.Customer.Bonus;
            //se il cliente ha accumulato un bonus superiore al costo dei prodotti ordinati pongo 
            //il prezzo da pagare  a 0 (n.b. vanno sempre sommate le spese di spedizione)
            if (totale < cart.Customer.Bonus)
            {
                ViewBag.TotaleMenoBonus = 0;
                ViewBag.BonusResiduo = cart.Customer.Bonus - totale;
            }
            else
            {
                ViewBag.TotaleMenoBonus = totale - cart.Customer.Bonus;
                ViewBag.BonusResiduo = 0;
            }
            ViewBag.TotaleConSpeseSpedizione = ViewBag.TotaleMenoBonus + Convert.ToDecimal(ConfigurationManager.AppSettings["SpeseSpedizione"]);
            ViewBag.LocationId = locationId;
            ViewBag.SelectedPayment = paymentType;

            return View();
        }
      
    }
}
